--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / tools / ToolsPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/tools/ToolsPage.vue b27028a7fbdb9530f658ad1661824944e16e70bf (b27028a7) Text, 9.78 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD AND MIT -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full pb-[max(1rem,env(safe-area-inset-bottom))]"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"border-b border-gray-200 dark:border-zinc-800 px-4 py-4 md:px-6 md:py-5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between lg:gap-6"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2 min-w-0 flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-2xl md:text-3xl font-black text-gray-900 dark:text-white tracking-tight"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.power_tools"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300 leading-relaxed max-w-xl"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.diagnostics_description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full lg:max-w-sm shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"relative group"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"magnify"
Te6edf3classTff7b72=Ta5d6ff"size-5 text-gray-400 group-focus-within:text-blue-500 transition-colors"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3searchQueryTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'common.search'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full pl-10 pr-10 py-3 bg-gray-50 dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 rounded-lg focus:outline-hidden focus:ring-2 focus:ring-blue-500/40 focus:border-blue-500 text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 text-sm"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3searchQueryTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-200"
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3searchQuery Tff7b72= Ta5d6ff''Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close-circle" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-4 md:p-6 xl:p-8 w-full max-w-6xl xl:max-w-7xl 2xl:max-w-384 mx-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-lg overflow-hidden border border-gray-200 dark:border-zinc-800 bg-white dark:bg-zinc-950"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 lg:grid-cols-2 divide-y divide-gray-200 dark:divide-zinc-800 divide-x-0 lg:divide-x lg:divide-y"
Tb4b4b4>
Tb4b4b4<Tff7b72RouterLink
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3tool Tff7b72in Te6edf3filteredToolsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3nameTa5d6ff"
Tb4b4b4:Te6edf3toTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3comingSoon Tff7b72? Ta5d6ff'' Tff7b72: Te6edf3toolTb4b4b4.Te6edf3routeTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Tb4b4b4[
Ta5d6ff'tool-row'Tb4b4b4,
Te6edf3toolTb4b4b4.Te6edf3customClassTb4b4b4,
Te6edf3toolTb4b4b4.Te6edf3comingSoon Tff7b72? Ta5d6ff'opacity-60 grayscale-[0.5] cursor-default' Tff7b72: Ta5d6ff''Tb4b4b4,
Tb4b4b4]Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)
Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3comingSoon Tff7b72? Te6edf3$eventTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4) Tff7b72: Tff7b72nullTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3iconBgTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3iconTa5d6ff" Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3iconTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-6 h-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72img
Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3imageTa5d6ff"
Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3imageTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3imageClassTa5d6ff"
Tb4b4b4:Te6edf3altTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3imageAltTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"tool-card__title"Tb4b4b4>Tff7b72{{ Te6edf3toolTb4b4b4.Te6edf3title Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3alphaTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300 rounded-sm border border-violet-200 dark:border-violet-800"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.alpha_badge"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3betaTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded-sm border border-amber-200 dark:border-amber-800"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.beta_badge"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3comingSoonTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider bg-gray-100 dark:bg-zinc-800 text-gray-500 dark:text-gray-400 rounded-sm border border-gray-200 dark:border-zinc-700"
Tb4b4b4>
Soon
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"tool-card__description"Tb4b4b4>
Tff7b72{{ Te6edf3toolTb4b4b4.Te6edf3description Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3toolTb4b4b4.Te6edf3comingSoonTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"shrink-0 flex items-center gap-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3extraActionTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72a
Tb4b4b4:Te6edf3hrefTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3extraActionTb4b4b4.Te6edf3hrefTa5d6ff"
Tb4b4b4:Te6edf3targetTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3extraActionTb4b4b4.Te6edf3targetTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-2 hover:bg-gray-100 dark:hover:bg-zinc-800 rounded-lg transition-colors text-gray-400 hover:text-blue-500"
@Te6edf3click.Te6edf3stop
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3toolTb4b4b4.Te6edf3extraActionTb4b4b4.Te6edf3iconTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"size-5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"chevron-right" Te6edf3classTff7b72=Ta5d6ff"tool-card__chevron" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3v-else Te6edf3icon-nameTff7b72=Ta5d6ff"chevron-right" Te6edf3classTff7b72=Ta5d6ff"tool-card__chevron" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72RouterLinkTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3filteredToolsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mt-6 rounded-lg border border-dashed border-gray-300 dark:border-zinc-700 px-4 py-12 text-center"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"magnify" Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 mx-auto mb-4 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-600 dark:text-gray-400"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.no_results"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3listTools Tb4b4b4} Tff7b72from Ta5d6ff"../../js/registries/toolsRegistry.js"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"ToolsPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3rnodeLogoPathTff7b72: Ta5d6ff"/rnode-flasher/reticulum_logo_512.png"Tb4b4b4,
Te6edf3searchQueryTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3toolsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3listToolsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3filteredToolsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3toolsWithTranslations Tff7b72= Tff7b72thisTb4b4b4.Te6edf3toolsTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3toolTb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tb4b4b4...Te6edf3toolTb4b4b4,
Te6edf3titleTff7b72: Te6edf3toolTb4b4b4.Te6edf3title Tff7b72|| Tb4b4b4(Te6edf3toolTb4b4b4.Te6edf3titleKey Tff7b72? Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Te6edf3toolTb4b4b4.Te6edf3titleKeyTb4b4b4) Tff7b72: Ta5d6ff""Tb4b4b4)Tb4b4b4,
Te6edf3descriptionTff7b72: Te6edf3toolTb4b4b4.Te6edf3description Tff7b72|| Tb4b4b4(Te6edf3toolTb4b4b4.Te6edf3descriptionKey Tff7b72? Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Te6edf3toolTb4b4b4.Te6edf3descriptionKeyTb4b4b4) Tff7b72: Ta5d6ff""Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3searchQueryTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3toolsWithTranslationsTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3query Tff7b72= Tff7b72thisTb4b4b4.Te6edf3searchQueryTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3toolsWithTranslationsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3toolTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Tb4b4b4(
Te6edf3toolTb4b4b4.Te6edf3titleTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3queryTb4b4b4) Tff7b72||
Te6edf3toolTb4b4b4.Te6edf3descriptionTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3queryTb4b4b4) Tff7b72||
Te6edf3toolTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3queryTb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72style Te6edf3scopedTb4b4b4>
Tb4b4b4@Tff7b72reference Ta5d6ff"../../style.css"Tb4b4b4;
Tb4b4b4.T56d364tool-row Tb4b4b4{
@apply flex items-start Te6edf3smTb4b4b4:Te6edf3items-center Tff7b72gapT79c0ff-3 Te6edf3smTff7b72:Tff7b72gapT79c0ff-4 Te6edf3px-4 Te6edf3py-3T79c0ff.5 Te6edf3min-h-17 Tff7b72transitionTff7b72-Te6edf3colorsTb4b4b4;
@apply Te6edf3hoverTb4b4b4:Te6edf3bg-gray-50 Te6edf3darkTff7b72:Te6edf3hoverTff7b72:Te6edf3bg-zinc-900Tff7b72/T79c0ff80 Te6edf3activeTff7b72:Te6edf3bg-gray-100 Te6edf3darkTff7b72:Te6edf3activeTff7b72:Te6edf3bg-zinc-800Tff7b72/T79c0ff80Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tool-card__icon Tb4b4b4{
@apply w-11 h-11 Te6edf3smTb4b4b4:Te6edf3w-12 Te6edf3smTff7b72:Te6edf3h-12 Te6edf3rounded-xl Tff7b72flex Te6edf3items-center Tff7b72justifyTff7b72-Tff7b72center Te6edf3shrink-0Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tool-card__title Tb4b4b4{
@apply text-base Te6edf3smTb4b4b4:Tff7b72textTff7b72-Te6edf3lg Tff7b72fontTff7b72-Te6edf3semibold Tff7b72textTff7b72-Tff7b72grayT79c0ff-900 Te6edf3darkTff7b72:Tff7b72textTff7b72-Tff7b72whiteTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tool-card__description Tb4b4b4{
@apply text-sm text-gray-600 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Tff7b72grayT79c0ff-300 Te6edf3mt-0T79c0ff.5 Tff7b72line-clampT79c0ff-2 Te6edf3smTff7b72:Tff7b72line-clampTff7b72-Tff7b72noneTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364tool-card__chevron Tb4b4b4{
@apply w-5 h-5 text-gray-400 shrink-0Tb4b4b4;
Tb4b4b4}
Tb4b4b4<Tb4b4b4/Tff7b72styleTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────